package cn.wolfcode.luowowo.advice;

import cn.wolfcode.luowowo.exception.LogicException;
import cn.wolfcode.luowowo.util.JsonResult;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.security.auth.login.LoginException;

/**
 * 通过动态代理的方式对controller中请求方法异常 尽心统一处理
 * @ControllerAdvice  controller类的功能增强标签
 * 前置增强：可以对请求方法执行前进行功能增强
 * 后置增强：可以对请求方法执行后进行功能增强 ：典型：异常的统一处理
 *
 */
@ControllerAdvice
public class CommonExceptionHandler {

    //对所有的LogicException做增强处理
    @ExceptionHandler(LogicException.class)//指定处理哪种类型的异常
    @ResponseBody
    public Object displayException(LogicException e, Model model){
        e.printStackTrace();
        return JsonResult.error(JsonResult.CODE_ERROR, e.getMessage(), null);
    }

    //对所有的RuntimeException做增强处理
    @ExceptionHandler(RuntimeException.class)//指定处理哪种类型的异常
    @ResponseBody
    public Object runtimeException(LogicException e){
        e.printStackTrace();
        return JsonResult.defaultError();
    }

}
